// 枚举是组织收集有关联变量的一种方式

// 数字类型枚举与数字类型
enum Color {
  Red,
  Green,
  Blue
}

let col: Color = Color.Green;
col = 1; // 有效的，这也是 Color.Green

// 数字类型枚举与字符串类型
enum Tristate {
  False,
  True,
  Unknown
}

console.log(Tristate[0]); // 'False'
console.log(Tristate['False']); // 0
console.log(Tristate[Tristate.False]); // 'False' because `Tristate.False == 0`

// 改变与数字枚举关联的数字
// 默认情况下，第一个枚举值是 0，然后每个后续值依次递增 1：
enum Color2 {
  Red = 0,
  Green, // 1
  Blue // 2
}

// 但是，你可以通过特定的赋值来改变给任何枚举成员关联的数字，如下例子，我们从 3 开始依次递增：
enum Color3 {
  Red = 3,
  Green, // 4
  Blue // 5
}

// 有静态方法的枚举
enum Weekday {
  Monday,
  Tuesday,
  Wednesday,
  Thursday,
  Friday,
  Saturday,
  Sunday
}

// 使用 enum + namespace 的声明的方式向枚举类型添加静态方法。如下例所示，我们将静态成员 isBusinessDay 添加到枚举上：
namespace Weekday {
  export function isBusinessDay(day: Weekday) {
    switch (day) {
      case Weekday.Saturday:
      case Weekday.Sunday:
        return false;
      default:
        return true;
    }
  }
}

